package models

import (
	"time"

	"gorm.io/gorm"
)

// User 用户模型
// swagger:model
type User struct {
	gorm.Model
	ID        uint   `json:"id" gorm:"primaryKey"`
	OfflineID string `json:"offline_id" gorm:"size:20;uniqueIndex"` // 自定义ID字段，确保JSON序列化为小写id
	Name      string `json:"name" gorm:"size:50;not null"`
	Password  string `json:"password" gorm:"size:100;not null"`
	Email     string `json:"email" gorm:"size:100;unique"`
	OpenID    string `json:"open_id" gorm:"size:100;null"`
	Role      string `json:"role" gorm:"size:20;default:'user'"`     // 用户角色: user、moderator 或 admin (参见 constants.go)
	Status    string `json:"status" gorm:"size:20;default:'active'"` // 用户状态: active、banned 或 deleted (参见 constants.go)
	// 用户等级（1-10）
	Level int `json:"level" gorm:"default:1"`
	// 用户积分
	Points int `json:"points" gorm:"default:0"`
	// 最后登录时间
	LastLogin time.Time `json:"last_login" gorm:"default:null"`
	// 头像配置
	Avatar    string    `json:"avatar" gorm:"type:text"` // 头像URL或配置信息
	CreatedAt time.Time `json:"created_at"`              // 创建时间
}

// AvatarConfig 定义头像的具体配置项
type AvatarConfig struct {
	Hair         string `json:"hair"`
	HairColor    string `json:"hairColor"`
	Expression   string `json:"expression"`
	Clothes      string `json:"clothes"`
	ClothesColor string `json:"clothesColor"`
}

// SetAvatar 设置头像URL
func (u *User) SetAvatar(avatarURL string) {
	u.Avatar = avatarURL
}

// GetAvatar 获取头像URL
func (u *User) GetAvatar() string {
	return u.Avatar
}

func GetUserByID(id string) *User {
	var user User
	if err := GetDB().Where("id = ?", id).First(&user).Error; err != nil {
		return nil
	}
	return &user
}

// BeforeDelete 在删除用户之前将状态更新为deleted
func (u *User) BeforeDelete(tx *gorm.DB) error {
	return tx.Model(u).Update("status", StatusDeleted).Error
}
